/*
 * @Descripttion: 控件、布局数据接口定义
 * @Author: linzisong
 * @Date: 2021-06-29 16:55:15
 * @LastEditors: linzisong
 * @LastEditTime: 2021-07-08 14:45:54
 */
export interface dataType {
  list: lsitType[];
  config: configType;
}

export interface lsitType {
  readonly type: string;   // 表单类型
  readonly label: string;   // 标题文字
  readonly icon: string;   // 图标，目前仅支持element-icon 中的图标，后期添加svg
  model: string;   // 数据字段
  key: string;   // 数据唯一标识
  options: optionType;
  rules: ruleType[];   // 规则校验
}

export interface layoutType {
  readonly type: string;   // 表单类型
  readonly label: string;   // 标题文字
  readonly icon: string;   // 图标，目前仅支持element-icon 中的图标，后期添加svg
  model: string;   // 数据字段
  key: string;   // 数据唯一标识
  columns?: columnstype[];    // 栅格布局中的栅格数据
  options?: optionType;
  // rules?: ruleType[];   // 规则校验
  trs?: trsType[];     // 表格布局中 行数据
}

export interface configType {   // 配置项数据类型
  labelWidth: number;     // 表单域标签的宽度
  labelPosition: string;  // 对齐方式top、left、right
  size: string;           // 表单内组件尺寸控制
  inline: boolean;        // 行内表单模式
}

export interface customEventType {    // 自定义事件数据类型定义，有更好的类型可以进行替换，这里的定义有些不完美 /imperfect/
  oldIndex: number;
  newIndex: number;
}

export interface selectItemType {     // 高亮item
  key: string;
}

interface optionType {
  type?: string;   // 表单类型
  width?: string;   // 宽度
  defaultValue?: string;   // 默认值
  placeholder?: string;
  clearable?: boolean;
  hidden?: boolean;  // 是否隐藏，false显示，true隐藏
  disabled?: boolean;  // 是否禁用，false不禁用，true禁用

  gutter?: number;  // 栅格布局专用
  borderWidth?: number;   // 设置表格布局边框宽度
  justify?: string;
  align?: string;

}

interface ruleType {     // 校验规则
  message?: string;              // 提示信息
  type?: string;                // 校验类型
  required?: boolean;           // 是否必填
  pattern?: string;             // 正则表达式
}

interface columnstype { // 栅格数据
  span: number;
  list: lsitType[];
}
interface trsType {   // 行数据
  tds: tdsType[];
}
interface tdsType {   // 给子数据
  colspan: number;
  rowspan: number;
  width: string;
  height: string;
  list: lsitType[];
  rowNo: number[];
  colNo: number[];
}
